package com.sky.orangehireserver.modules.job_seeker.service;

import com.sky.orangehireserver.modules.job_seeker.dto.SeekerLoginDTO;
import com.sky.orangehireserver.modules.job_seeker.dto.SeekerRegisterDTO;
import com.sky.orangehireserver.modules.job_seeker.dto.SeekerUpdateDTO;
import com.sky.orangehireserver.modules.job_seeker.vo.SeekerAccountVO;
import com.sky.orangehireserver.modules.job_seeker.vo.SeekerLoginVO;

/**
 * 求职者账号管理服务接口
 * 
 * @author sky
 */
public interface SeekerAccountService {

    /**
     * 求职者注册
     * 
     * @param registerDTO 注册请求DTO
     * @return 用户信息VO
     */
    SeekerAccountVO register(SeekerRegisterDTO registerDTO);

    /**
     * 求职者登录
     * 
     * @param loginDTO 登录请求DTO
     * @return 登录响应VO
     */
    SeekerLoginVO login(SeekerLoginDTO loginDTO);

    /**
     * 根据ID获取求职者信息
     * 
     * @param userId 用户ID
     * @return 用户信息VO
     */
    SeekerAccountVO getSeekerById(Long userId);

    /**
     * 更新求职者信息
     * 
     * @param userId 用户ID
     * @param updateDTO 更新请求DTO
     * @return 用户信息VO
     */
    SeekerAccountVO updateSeeker(Long userId, SeekerUpdateDTO updateDTO);

    /**
     * 求职者退出登录
     * 
     * @param userId 用户ID
     * @param token 访问令牌
     */
    void logout(Long userId, String token);

    /**
     * 注销求职者账号
     * 
     * @param userId 用户ID
     */
    void deleteAccount(Long userId);

    /**
     * 验证访问令牌
     * 
     * @param token 访问令牌
     * @return 用户ID
     */
    Long validateToken(String token);

    /**
     * 刷新访问令牌
     * 
     * @param token 当前令牌
     * @return 新的登录响应VO
     */
    SeekerLoginVO refreshToken(String token);
}
